Add global search and replace via gstrsub.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 6 Jan 2005 16:21:16 +0000 (16:21 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 6 Jan 2005 16:21:16 +0000 (16:21 +0000)
gpsbabel/defs.h
gpsbabel/util.c

index e0ac7e40c3f85517b586080cbe2e6372bd57e6d9..e349b5d6b8a6d37b38d7db3936f4834cf8e01b9a 100644 (file)
@@ -475,7 +475,8 @@ void xfputs(const char *errtxt, const char *s, FILE *stream);
 
 int case_ignore_strcmp(const char *s1, const char *s2);
 
-char *strsub(char *s, char *search, char *replace);
+char *strsub(const char *s, const char *search, const char *replace);
+char *gstrsub(const char *s, const char *search, const char *replace);
 void rtrim(char *s);
 signed int get_tz_offset(void);
 time_t current_time(void);
index c58520ac068f5a5e00ee013eda4fc25808f740b8..11d3e878393754aefd63c992bd6149e7e6d106c1 100644 (file)
@@ -621,7 +621,7 @@ double degrees2ddmm(double deg_val) {
  * Doesn't try to make an optimally sized dest buffer.
  */
 char *
-strsub(char *s, char *search, char *replace)
+strsub(const char *s, const char *search, const char *replace)
 {
        char *p;
        int len = strlen(s);
@@ -649,6 +649,21 @@ strsub(char *s, char *search, char *replace)
        return d;
 }
 
+/*
+ *  As strsub, but do it globally.
+ */
+char *
+gstrsub(const char *s, const char *search, const char *replace)
+{
+       char *o = xstrdup(s);
+
+       while (strstr(o, search)) {
+               o = strsub(o, search, replace);
+       }
+
+       return o;
+}
+
 char *
 rot13( const char *s )
 {
@@ -783,6 +798,32 @@ char * str_utf8_to_cp1252( const char * str )
        return result;
 }
 
+#if 0
+/*
+ * Convert to ISO 8859-1 (LATIN-1). The result is never longer than 
+ * the source.  
+ */
+char * 
+str_utf8_to_8859_1( const char * str )
+{
+       char *result = xstrdup( str );
+       char *cur = result;
+       unsigned char c;
+
+       while (c = *str++) {
+               if (c < 0x80) {
+                       *cur++ = c;
+                       continue;
+               } 
+               if ((c & 0xFE) == 0xC2) {
+                       *cur++ = ((c & 0x03) << 6) | (*str++ & 0x3f);
+               }
+       }
+
+       return result;
+}
+#endif
+
 char * str_utf8_to_ascii( const char * str )
 {
        char *result;